#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include<string.h>

//int main()
//{
//	int arr1[5] = { 1,2,3,4,5 }; //完全初始化
//    int arr2[10] = { 5 }; //不完全初始化，剩余元素默认为0
//
//	//int --> 数组元素类型
//	//去掉数组名，剩下的就是数组类型 int [10]
//	//数组也是有类型的
//
//	//double d = 3.14;
//	//printf("sizeof(d) = %zd\n", sizeof(d));
//	//printf("siseof(arr1) = %zd\n", sizeof(arr1));
//	//printf("sizeof(int[5]) = %zd\n", sizeof(int[5]));
//	//printf("sizeof(arr2) = %zd\n", sizeof(arr2));
//
//	//========================================================
//
//	////整形数组的操作是逐个元素处理的，没办法一次性输入，也不能一次性输出，必须用循环
//	//int arr3[5] = { 0 };
//	//int i = 0;
//	//for (i = 0; i < 5; i++)
//	//{
//	//	scanf("%d", &arr3[i]);
//	//}
//	//for (i = 0; i < 5; i++)
//	//{
//	//	printf("%d ", arr3[i]);
//	//}
//
//	//========================================================
//
//	////字符型数组
//	//char arr4[10] = { 'a','b','c','d','e' };
//	//char arr5[10] = "abcde";
//
//	//int i = 0;
//
// //   printf("%s\n", arr4);
//	//for(i = 0; i < 5; i++)
//	//{
//	//	printf("%c ", arr4[i]);
//	//}
// //   printf("\n");
//
// //   printf("%s\n", arr5);
// //   for (i = 0; i < 5; i++)
//	//{
//	//	printf("%c ", arr5[i]);
//	//}
// //   printf("\n");
//
//	//========================================================
//
//	//int arr[10] = { 0 };
//	//int i = 0;
// //   for (i = 0; i < 10; i++)
//	//{
//	//	printf("&arr[%d] = %p\n", i,&arr[i]); //输出地址用%p
//	//}
//	////x86-->编译产生32位的程序，地址32位,比较短（早期）方便观察
//	////x64-->编译产生64位的程序，地址64位,比较长
//	////地址默认16进制
//	////输出结论：数组在内存中是连续存储的
//
//	//========================================================
//
//	//sizeof计算元素个数
//	int arr[10] = { 0 };
//    printf("sizeof(arr) = %zd\n", sizeof(arr)); //数组总长度，单位字节
//	printf("sizeof(arr) = %zd\n", sizeof(arr) / sizeof(arr[0])); //数组元素个数
//
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//    for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	
//	return 0;
//}

int main()
{
	char acX[] = "abcdefg";
	char acY[] = { 'a','b','c','d','e','f','g' };
	//acX 是用字符串字面量初始化的字符数组，字符串字面量会自动添加 '\0' 作为结束标志；
	// acY 是用字符列表初始化的，没有 '\0'。
	// 所以二者不等价。

	printf("%zd\n", sizeof(acX));
    printf("%zd\n", sizeof(acY));
	//acX 中包含字符 'a'到'g'以及 '\0'，共 8 个元素；
	// acY 只有'a'到'g'这 7 个元素。
	// 长度不同。
	//sizeof(acX) 计算的是acX数组的字节数，
	// acX有 8 个char类型元素，所以sizeof(acX)=8；
	// sizeof(acY)中acY有 7 个char类型元素，所以sizeof(acY)=7

	printf("%d\n", strlen(acX));
    printf("%d\n", strlen(acY));
	//strlen 计算的是字符串中'\0'之前的字符个数。
	// acX有'\0'，strlen(acX)=7；
	// acY没有'\0'，strlen(acY)结果是不确定的（因为会一直找'\0'直到越界）。

	return 0;
}